//
//  HMNavigationController.swift
//  Weibo
//
//  Created by itteacher on 2017/7/22.
//  Copyright © 2017年 itteacher. All rights reserved.
//

import UIKit
//  定义导视图控制器
class HMNavigationController: UINavigationController, UIGestureRecognizerDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        //  设置pop返回手势代理
        self.interactivePopGestureRecognizer?.delegate = self
        
    }

    //  监听push操作
    override func pushViewController(_ viewController: UIViewController, animated: Bool) {
        
        
        //  在push之前，先隐藏tabbar
        if viewControllers.count > 0 {
            //  bug: push的时候出现导航栏黑影问题
            //  1. 设置window背景色
            //  2. 设置tabbar的背景图片
            viewController.hidesBottomBarWhenPushed = true
        }
        print(viewControllers.count)
        super.pushViewController(viewController, animated: animated)
        //  代码执行到此，表示压栈成功
        print(viewControllers.count)
        //  不判断根视图控制器，那么从第二级控制器开始判断
        if viewControllers.count > 1 {
            var title: String = ""
            if viewControllers.count == 2 {
                //  判断是第二级控制器，获取第一级控制器的标题
                title = viewControllers.first!.title!
            } else {
                title = "返回"
            }
            //  设置左侧导航栏按钮,如果设置了导航栏的左侧按钮，那么pop返回手势就不用了，需要设置手势代理
            viewController.navigationItem.leftBarButtonItem = UIBarButtonItem(title: title, imageName: "navigationbar_back_withtext", target: self, action: #selector(backAction))
            viewController.navigationItem.title = "当前显示的是第\(viewControllers.count)级控制器"
        }
        
        
        
    }
    
    //  MARK: --  导航栏返回事件
    @objc private func backAction() {
        self.popViewController(animated: true)
    }
    
    //  MARK: --UIGestureRecognizerDelegate
    func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
        //  如果是根视图控制器，不能开启pop返回手势
        if viewControllers.count == 1 {
            return false
        }
        //  开启pop返回手势
        return true
    }

}
